允许手机进入安全模式 您所在的位置:网站首页 手机 安全模式 允许手机进入安全模式

允许手机进入安全模式

2024-07-13 22:45| 来源: 网络整理| 查看: 265

Android 手机如何进入&离开安全模式?  Android从版本4.1开始导入「安全模式」(Safe Mode)。它的原理与微软Windows 的安全模式相似。如果装置发生问题,例如应用程序当机、重新启动或电池很快耗尽,此时可启动安全模式来检查问题是否为第三方应用程序所造成。启动后,系统不会加载第三方应用程序,仅会就自身的系统来进行正常启动。这样用户便能进行系统检测、修复错误,或卸载有问题的应用程序。  安全模式有以下特点: Ø   任何第三方应用程序都不会自动启动,只有系统应用程序可以执行 Ø   桌面左下角会显示「安全模式」字样 Ø   在安全模式下,用户可以卸载有问题的应用程序 Ø   安全模式不会损坏任何应用程序和个人数据

1.在AndroidManifest.xml manifest属性中添加android:sharedUserId="android.uid.system" 2.如果AndroidManifest.xml manifest属性中已经有android:sharedUserId属性值就只能修改 system/core/init/property_service.c check_perms函数中添加 if (app_id == AID_BLUETOOTH) {         uid = app_id;      }      /**添加属性例外 */      if(strncmp(name,"persist.sys.flip_mute",strlen("persist.sys.flip_mute")) == 0){          return 1;      }  }

Systemproperties类在android.os下,但这个类是隐藏的,上层程序开发无法直接使用。其实用java的反射机制是可以使用这个类。何谓java反射机制,请自行研究学习,在此不做介绍,放到后续文章中。用JNI的方式,可以绕过Systemproperties这个类,直接本地调用来实现创建、获取及修改系统属性。

这篇文章主要介绍android系统属性的命名方式: 创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是android属性的名称是有一定的格式要求的,如下:前缀必须用system\core\init\property_service.c中定义的前缀,进行系统属性设置的程序也必须有system或root权限, 如何将android程序的权限提升到system权限?方法是这样的: 1、在AndroidManifest.xml中,在manifest加入android:sharedUserId="android.uid.system"。 2、在Android.mk中,將LOCAL_CERTIFICATE := XXX修改成LOCAL_CERTIFICATE :=platform。 经过以上两步就可以把ap的权限提升到system权限了。但是用这种方法提升权限有两个弊端,如下: 1、程序的拥有者必须有程序的源码; 2、程序的拥有者还必须有android开发环境,就是说自己能make整个android系统。

怎样获得和设置属性     在Android中有三种方式来设置和获取属性: 1、Native代码     当编写Native的程序时,可以使用property_get和property_set API来获得和设置属性。使用这两个API必须要包含头文件cutils/properties.h和链接libcutil库。 2、Java代码     Android在Java库中提供System.getProperty和System.setProperty方法,我们Java程序可以通过他们来设置和获得属性。     但是请注意!虽然从语法上面看Java的代码和Native代码非常相近,但是Java版本存储把属性存在其他地方,而不是我们上面提到的属性系统中。在JVM中有一个hash表来维护Java的属性。所以Java属性和Android属性是不同的,不能用Java API(System.getProperty和System.setProperty)来设置系统属性。也不能通过Native的方法(property_get和property_set)设置Java的属性。 更新:Andrew指出android.os.SystemProperties可以操作Android系统属性(虽然这个类倾向于内部使用)。这个类通过JNI调用Native的property_get和property_set方法来获得和设置属性。 3、Shell脚本    Android提供了命令行工具setprop和getprop来设置和获取属性,他们可以在脚本中被使用。 原文:http://rxwen.blogspot.com/2010/01/android-property-system.html

源码:

(https://blog.csdn.net/gulinxieying/article/details/78677377)

通过Systemproperties.set对REBOOT_SAFEMODE_PROPERTY的值设置为1来进行更改

ShutdownThread.java public void run() { ... /* * If we are rebooting into safe mode, write a system property * indicating so. */ if (mRebootSafeMode) { SystemProperties.set(REBOOT_SAFEMODE_PROPERTY, "1"); } ... }

属性定义的类:

http://blog.csdn.net/jackyu613/article/details/6136620

         补充:通过查看property_service.c,我们可以明确以下事实:

1、  属性名不是随意取的。在property_perms数组中定义了当前系统上可用的所有属性的前缀,以及相对应的存取权限UID。对属性的设置要满足权限要求,同时命名也要在这些定义的范围内。

2、  PA_COUNT_MAX指定了系统(共享内存区域中)最多能存储多少个属性。

3、  PROP_NAME_MAX指定了一个属性的key最大允许长度;PROP_VALUE_MAX则指定了value的最大允许长度。

此外,http://blog.csdn.net/tekkamanitachi/archive/2009/06/18/4280982.aspx 这篇文章翻译了Android的官方文档,从另一个角度叙述了属性系统,需要者请参看。

(https://blog.csdn.net/xujianqun/article/details/6363318)

 每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。

由adb命令知道设置的属性名是“persist.sys.safemode”

https://android.stackexchange.com/questions/131188/entering-safe-mode-from-adb-shell

adb shell su -c 'setprop persist.sys.safemode 1' adb shell su -c 'echo "1" > /data/property/persist.sys.safemode' #alternative

或者

adb shell busybox printf "1" > /data/property/persist.sys.safemode #works if recovery has Busybox. If Android OS has busybox then system/xbin/busybox would work adb shell echo "1" > /data/property/persist.sys.safemode #alternative adb shell chmod 600 /data/property/persist.sys.safemode #required; changes the permission of file to rw-------, identical to rest of the files under /data/property

通过反射设置属性:

public static void setProp(String key,String value){ try { Class cls = Class.forName("android.os.SystemProperties"); Method m = cls.getDeclaredMethod("set",String.class,String.class); m.invoke(cls,key,value); } catch (Exception e) { e.printStackTrace(); } } public static boolean getProp(String key){ try { Class cls = Class.forName("android.os.SystemProperties"); Method m = cls.getDeclaredMethod("get",String.class,String.class); String value = (String)m.invoke(cls,key,"-1"); if(value.equals("1")){ return true; }else { return false; } } catch (Exception e) { e.printStackTrace(); } return false; } 通过设置"persist.sys.safemode"的值时

setProp("persist.sys.safemode","0") 报以下错误,说明没有权限进行改变

Access denied finding property "persist.sys.safemode"

总结:

允许“安全模式”,需要将persist.sys.safemode的值置为true

方法:

①通过jni调用native方法

②通过shell指令,需要root权限

adb shell su -c 'setprop persist.sys.safemode 1'③通过反射获取设置属性的方法,但是当进行设置时会报没有权限的错误,不知到该怎么解决,是不是需要加系统签名

public static void setProp(String key,String value){ try { Class cls = Class.forName("android.os.SystemProperties"); Method m = cls.getDeclaredMethod("set",String.class,String.class); m.invoke(cls,key,value); } catch (Exception e) { e.printStackTrace(); } }

通过设置"persist.sys.safemode"的值时 setProp("persist.sys.safemode","0") 报以下错误,说明没有权限进行改变 Access denied finding property "persist.sys.safemode"

注:

原文地址:

根据Android设备的品牌和型号,通过物理按键进入安全模式

https://blog.csdn.net/wxlinwzl/article/details/43671719

没有音量键进入安全模式的方法

https://blog.csdn.net/wszonline/article/details/73331726

安全模式的定义

https://www.asus.com.cn/support/FAQ/1005163

安全模式的源码

https://blog.csdn.net/gulinxieying/article/details/78677377

安全模式启动流程

https://blog.csdn.net/arlen6310/article/details/53638350

用shell指令进入安全模式,需root权限

https://android.stackexchange.com/questions/131188/entering-safe-mode-from-adb-shell

修改peoperty——service的方法,需要系统权限

www.mamicode.com/info-detail-841983.html

Android属性:所设属性值为何在重起后被清除

https://www.2cto.com/kf/201208/148803.html

通过修改framwork层来修改手机属性

http://blog.sina.com.cn/s/blog_4b4b54da0102wcjz.html

http://blog.sina.com.cn/s/blog_6b936f150101jhfl.html

Android 系统属性相关ro.* & persist.*

Android SystemProperties设置/取得系统属性的用法总结

https://www.cnblogs.com/senior-engineer/p/4972848.html

Android系统属性分析ro.persist.

https://blog.csdn.net/hecong_kit/article/details/46008895

Android 4.0安全模式分析

https://blog.csdn.net/kehyuanyu/article/details/46697485

通过反射设置系统属性

https://blog.csdn.net/doris_d/article/details/52998237

https://blog.csdn.net/u012539700/article/details/78321973



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有